﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Util
{
    public class ViewState
    {
        // 세션에 저장됨. 따라서 너무 큰 데이터의 저장은 좋지 않지만, 로그아웃하면 사라짐.
        // 저장하고 로드하는 객체의 타입이 같지 않아도 됨. 이름과 타입이 같은 속성값이 복사됨.

        public static void Load(string 키, object 타겟, object 디폴트값 = null)
        {
            var 저장값 = HttpContext.Current.Session[키];
            if (저장값 != null)
                BeanUtil.속성복사(소스: 저장값, 타겟: 타겟, 널아닌소스속성만: true, 널인타겟속성만: true);

            // ViewState 데이터를 로드한 후에도 null인 속성은, 타겟에 디폴트값을 대입함
            if (디폴트값 != null)
                BeanUtil.속성복사(소스: 디폴트값, 타겟: 타겟, 널아닌소스속성만: true, 널인타겟속성만: true);
        }

        public static void Save(string 키, object 소스)
        {
            HttpContext.Current.Session[키] = 소스;
        }
    }
}